package data;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;

import javax.sql.DataSource;

import data.util.Al22DataSource;
import entitee.Personne;

/**Implementation JDBC pour le DAO Personne.
 * @author HAL
 *
 */
public class DaoPersonneImpl implements IDaoPersonne {
    /**
     * Datasource pour connexion a la BDD.
     */
    private DataSource ds = new Al22DataSource();

    /**Rocket d'insertion d'un Grut en base.
     *
     */
    private String reqAjout =
            "INSERT INTO personne (nom,mail,mdp,naissance)"
            + "VALUE (?,?,?,?)";
    /**
     * Indice du retour de l'id.
     */
    private final int indiceIdGenere = 1;
    /**
     * indice du parametre nom dans la requete.
     * {@link DaoPersonneImpl#reqAjout}
     */
    private final int indiceNomAjout = 1;
    /**
     * indice du parametre mail dans la requete.
     * {@link DaoPersonneImpl#reqAjout}
     */
    private final int indiceMailAjout = 2;
    /**
     * indice du parametre mdp dans la requete.
     * {@link DaoPersonneImpl#reqAjout}
     */
    private final int indiceMdpAjout = 3;
    /**
     * indice du paramatre naissance dans la requete.
     * {@link DaoPersonneImpl#reqAjout}
     */
    private final int indiceNaissanceAjout = 4;
    @Override
    public Personne ajouter(Personne paramPers) {
        Connection cnx = null;

        try {
            cnx = ds.getConnection();
            PreparedStatement pstmt = cnx.prepareStatement(reqAjout, Statement.RETURN_GENERATED_KEYS);
            pstmt.setString(indiceMailAjout, paramPers.getMail());
            pstmt.setString(indiceNomAjout, paramPers.getNom());
            pstmt.setString(indiceMdpAjout, paramPers.getMdp());
            pstmt.setDate(indiceNaissanceAjout, new java.sql.Date(paramPers.getNaissance().getTime()));
            int nbLigne = pstmt.executeUpdate();
            ResultSet rsKey = pstmt.getGeneratedKeys();
            if (nbLigne == 1 && rsKey.next()) {
                paramPers.setId(rsKey.getInt(indiceIdGenere));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                cnx.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        return paramPers;
    }

    @Override
    public List<Personne> rechercher(String paramNom) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Personne verifMail(String paramMail) {
        // TODO Auto-generated method stub
        return null;
    }

}
